/*
   后端接口统一调用
 */
import axios from 'axios'
import * as Base64 from 'js-base64'
const serverContextPath = '/'  // 后端服务器访问名称
const serverTestUrl = 'http://127.0.0.1:9090'   // 本地开发/线上开发地址
const serveProduceUrl = 'http://xxxx.xxxx.xxxx.xxxx:9090'  // 测试/生产地址

let  testURL = serverTestUrl + serverContextPath + '/' // 本地开发/线上开发地址
let produceUrl = serveProduceUrl + serverContextPath + '/' // 测试/生产地址

// 客户端登录clientID
const  Authorization = 'Basic ' + Base64.encode('webapp:123456')
// 全局请求超时配置
axios.defaults.timeout = 10 * 1000  // 30s

// 打包时环境选择
export const baseUrl = process.env.NODE_ENV === 'development' ? testURL : produceUrl

/**
 * Author: liuxinghong
 * Method:post/get
 * URL:ajax url
 * Params:{'xx':'xx'}
 **/
export function httpRequest (method, url, params, contentType) {
  if (contentType === null || contentType === '') { // 请求头  键值对传参 ，多用于get
    return axios({
      method: method,
      baseURL: baseUrl,
      url: url,
      params: params,
      timeout: 10000
    })
  } else { // 请求体json传参 多用于post
    return axios({
      contentType: 'application/json',
      method: method,
      baseURL: baseUrl,
      url: url,
      data: params,
      timeout: 10000
    })
  }
}
// 上传文件
export function httpRequestUpload (url, file) {
  // var url2 = (process.env.NODE_ENV === 'development' ? testURL : produceUrl) + url
  let formData = new FormData()
  formData.append('file', file)
  return axios({
    method: 'post',
    url: baseUrl,
    headers: {
      'Content-Type': 'multipart/form-data'
    },
    data: formData
  })
}


// 拦截请求 拦截器设置请求头
axios.interceptors.request.use(function (config) {
  // 判断是否是登录请求。是的话加上登录端信息
  if (config.url === 'auth/oauth/token') {
    config.headers.Authorization = Authorization
  } else {
    config.headers.Authorization = window.localStorage.getItem('token')  // 通过拦截器在请求头中设置请求头携带的token信息
  }
  return config
}, function (error) {
  return Promise.reject(error)
})

// 拦截响应
axios.interceptors.response.use(function (resp) {
  if (resp.data.status === '401') {
    location.href = '#/'
  } else {
    return resp.data
  }
}, function (error) {
  if (error.response == null) { error.msg = '网络异常' }
  return Promise.reject(error)
})
